package com.yuw.dao;

import org.apache.commons.dbutils.QueryRunner;
import org.apache.commons.dbutils.ResultSetHandler;
import org.springframework.stereotype.Component;

import javax.sql.DataSource;
import java.sql.SQLException;

@Component
public class DBProvider {

    /**
     * 数据库查询操作
     *
     * @param sql    查询语句
     * @param rsh    查询结果集类型的handler
     * @param params 查询语句的参数数组
     * @param <T>    返回查询结果集的泛型
     * @return 查询结果集
     */
    public <T> T query(String sql, ResultSetHandler<T> rsh, Object... params) {
        // 获取单例的数据源对象
        DataSource dataSource = DBCPDataSource.getDataSource();
        // 创建queryrunner查询器
        QueryRunner queryRunner = new QueryRunner(dataSource);
        // 进行查询操作
        T t = null;
        try {
            t = queryRunner.query(sql, rsh, params);
        } catch (SQLException e) {
            System.out.println("数据库查询错误：" + e.getMessage());
            e.printStackTrace();
        }
        return t;
    }

    /**
     * 数据库的增删改操作
     *
     * @param sql    执行的sql语句
     * @param params sql对应的参数数组列表
     * @return 返回的处理结果数
     */
    public int update(String sql, Object... params) {
        // 获取单例的数据源对象
        DataSource dataSource = DBCPDataSource.getDataSource();
        // 创建queryrunner查询器
        QueryRunner queryRunner = new QueryRunner(dataSource);
        // 执行增删改操作
        int i = 0;
        try {
            i = queryRunner.update(sql, params);
        } catch (SQLException e) {
            System.out.println("数据库增删改错误：" + e.getMessage());
            e.printStackTrace();
        }
        return i;
    }
}
